🚀 PJ_API 管理系統

統一的 Ollama 模型 API 接口服務

服務狀態監控

正在檢查服務狀態...

請稍候

-
在線服務
-
離線服務
-
可用模型
上次更新:-
自動刷新 (30秒)
載入中...
正在獲取服務狀態

    使用統計

    📊
    0
    總請求數
    🎯
    0%
    成功率
    0ms
    平均回應時間
    🔤
    0
    總 Token 數

    Token 使用明細

    Prompt Tokens: 0
    Completion Tokens: 0
    錯誤次數: 0

    模型使用分布

    每日請求趨勢

    API 測試工具

    🚀 模型快速測試

    對每個模型發送簡單問題,快速確認服務是否正常運作

    載入模型列表中...

    1. 列出可用模型

    2. 聊天完成測試

    🎤 語音轉文字服務

    將語音檔案轉換為文字,支援多種音訊格式

    🎵

    支援格式

    WAV, MP3, M4A, OGG, FLAC, WebM

    🌍

    多語言支援

    中文、英文、日文等多種語言

    高效轉錄

    基於 Whisper 模型的高精度轉錄

    📁

    檔案限制

    最大支援 50MB 的音訊檔案

    🎙️ 即時麥克風錄音

    點擊麥克風開始錄音,再次點擊停止並自動轉錄翻譯

    🎙️

    點擊開始錄音

    翻譯成:

    📁 上傳音訊檔案

    📁

    點擊或拖放音訊檔案到這裡

    支援 WAV, MP3, M4A, OGG, FLAC 等格式

    API 使用方式

    端點資訊

    功能 方法 端點
    語音轉文字 (檔案) POST /v1/audio/transcriptions
    語音轉文字 (Base64) POST /v1/audio/transcriptions/base64
    🌐 文字翻譯 POST /v1/audio/translate
    🌐 語音轉錄+翻譯 POST /v1/audio/transcribe-and-translate

    使用範例 - cURL

    # 上傳音訊檔案進行轉錄
    curl -X POST "https://ollama_pjapi.theaken.com/v1/audio/transcriptions" \
      -F "file=@your_audio.wav"

    使用範例 - Python

    import requests
    
    url = "https://ollama_pjapi.theaken.com/v1/audio/transcriptions"
    
    with open("audio.wav", "rb") as f:
        files = {"file": f}
        response = requests.post(url, files=files)
    
    result = response.json()
    print("轉錄結果:", result["text"])

    使用範例 - JavaScript

    const formData = new FormData();
    formData.append('file', audioFile);
    
    const response = await fetch(
        'https://ollama_pjapi.theaken.com/v1/audio/transcriptions',
        { method: 'POST', body: formData }
    );
    
    const result = await response.json();
    console.log('轉錄結果:', result.text);

    回應格式

    {
        "success": true,
        "text": "轉錄出的文字內容",
        "details": [...],
        "error": null
    }

    對話歷史紀錄

    🔐

    需要密碼驗證

    請輸入管理員密碼以查看歷史對話紀錄

    📝 OCR 文件辨識服務

    上傳圖片文件,使用 AI 技術自動辨識文字內容,支援多種語言與輸出格式。

    📤 文件上傳
    📄
    拖放圖片或 PDF 到此處
    或點擊選擇檔案
    JPG PNG GIF WebP BMP PDF
    最大 20MB
    ⚙️ 辨識設定
    🎯 辨識方式
    🤖 選擇 OCR 模型

    選擇適合您需求的 OCR 模型

    🌐 文件語言
    📋 輸出格式
    📋 辨識結果
    📝

    上傳文件並點擊「開始辨識」查看結果

    API Key 管理

    管理系統的 API Key,可以建立、停用或刪除使用者的存取權限。

    🔑 DeepSeek API Key 管理

    載入中...

    更新 API Key

    💡 API Key 可從 DeepSeek 平台 獲取

    🌊 SiliconFlow API Key 管理

    載入中...

    更新 API Key

    💡 API Key 可從 SiliconFlow 平台 獲取

    建立新 API Key

    API Key 列表

    載入中...

    API 使用文檔

    📝 OCR API 文檔

    文字辨識 API,支援多種 OCR 引擎,包含 DeepSeek OCR(GPU 加速)、PP-OCR 及 LLaVA 視覺模型。

    可用 OCR 模型

    模型 ID 名稱 特點 最適用場景
    deepseek-ocr 🔮 DeepSeek OCR GPU 加速、高精度、智能版面分析 複雜文件、手寫辨識、多語言混排
    pp-ocrv5 📄 PP-OCRv5 超高精度、80+ 語言、表格辨識 高精度需求、多語言文件、表格
    llava-ocr 👁️ LLaVA 7B OCR AI 智能辨識、理解上下文 一般文件、手寫辨識、複雜版面
    general-ocr 📋 通用 OCR 高精度、快速處理 印刷文件、清晰圖片
    table-ocr 📊 表格 OCR 表格結構保留、欄位對齊 表格、報表、財務文件
    invoice-ocr 🧾 發票 OCR 發票格式、金額辨識 發票、收據、帳單

    POST /v1/ocr/recognize 參數

    參數 類型 必填 說明
    file File 上傳的圖片或 PDF 檔案(支援 JPG、PNG、GIF、WebP、BMP、PDF)
    model string OCR 模型,預設 llava-ocr,推薦 deepseek-ocr
    output_format string 輸出格式:textjsonmarkdownall
    language string 辨識語言:auto(自動)、zhenjako

    💡 DeepSeek OCR PDF 智能處理:

    上傳 PDF 時,系統會自動偵測是否包含可提取文字。若有內嵌文字則直接提取(更快更準確),若為掃描檔則自動轉圖片進行 OCR。

    Python 基礎設定

    import requests
    
    API_URL = "https://ollama_pjapi.theaken.com"
    API_KEY = "YOUR_API_KEY"
    
    headers = {"Authorization": f"Bearer {API_KEY}"}
    
    def ocr_recognize(file_path, model, language="auto", output_format="text"):
        """通用 OCR 辨識函數"""
        with open(file_path, "rb") as f:
            response = requests.post(
                f"{API_URL}/v1/ocr/recognize",
                headers=headers,
                files={"file": f},
                data={
                    "model": model,
                    "language": language,
                    "output_format": output_format
                }
            )
        return response.json()

    🔮 DeepSeek OCR(GPU 加速高精度)

    # DeepSeek OCR - 複雜文件、手寫辨識、多語言混排
    result = ocr_recognize(
        file_path="document.png",
        model="deepseek-ocr",
        language="auto"  # 支援: auto, zh, en, ja, ko
    )
    print("辨識結果:", result["text"])
    print("信心度:", result["confidence"])
    
    # DeepSeek OCR 辨識 PDF(自動偵測內嵌文字或轉圖片 OCR)
    result = ocr_recognize(
        file_path="document.pdf",
        model="deepseek-ocr",
        language="zh"
    )
    print(result["text"])

    📄 PP-OCRv5(超高精度多語言)

    # PP-OCRv5 - 高精度需求、80+ 語言支援、表格辨識
    result = ocr_recognize(
        file_path="multilang_doc.png",
        model="pp-ocrv5",
        language="auto",
        output_format="markdown"  # 支援: text, json, markdown, all
    )
    print("辨識結果:", result["text"])
    
    # PP-OCR 辨識多頁 PDF
    result = ocr_recognize(
        file_path="report.pdf",
        model="pp-ocrv5",
        output_format="all"
    )
    print(result["text"])

    👁️ LLaVA 7B OCR(AI 智能辨識)

    # LLaVA OCR - AI 智能辨識、理解上下文、複雜版面
    result = ocr_recognize(
        file_path="handwritten_note.jpg",
        model="llava-ocr",
        language="auto"
    )
    print("辨識結果:", result["text"])
    
    # LLaVA 適合處理手寫筆記、複雜排版
    result = ocr_recognize(
        file_path="complex_layout.png",
        model="llava-ocr"
    )
    print(result["text"])

    📋 通用 OCR(快速處理)

    # 通用 OCR - 印刷文件、清晰圖片、快速處理
    result = ocr_recognize(
        file_path="printed_doc.png",
        model="general-ocr",
        language="zh"
    )
    print("辨識結果:", result["text"])
    
    # 批量處理多個文件
    import os
    for filename in os.listdir("documents/"):
        if filename.endswith((".png", ".jpg")):
            result = ocr_recognize(f"documents/{filename}", model="general-ocr")
            print(f"{filename}: {result['text'][:100]}...")

    📊 表格 OCR(結構保留)

    # 表格 OCR - 表格結構保留、欄位對齊、Excel 匯出
    result = ocr_recognize(
        file_path="spreadsheet.png",
        model="table-ocr",
        output_format="json"  # 推薦使用 json 格式取得結構化資料
    )
    print("辨識結果:", result["text"])
    
    # 處理財務報表
    result = ocr_recognize(
        file_path="financial_report.pdf",
        model="table-ocr",
        output_format="markdown"
    )
    print(result["text"])

    🧾 發票 OCR(財務專用)

    # 發票 OCR - 發票格式、金額辨識、稅號提取
    result = ocr_recognize(
        file_path="invoice.jpg",
        model="invoice-ocr",
        output_format="json"  # 推薦 json 格式取得結構化發票資訊
    )
    print("辨識結果:", result["text"])
    
    # 處理收據
    result = ocr_recognize(
        file_path="receipt.png",
        model="invoice-ocr"
    )
    print(result["text"])

    查詢 OCR 模型與健康狀態

    # 查詢所有可用 OCR 模型
    response = requests.get(f"{API_URL}/v1/ocr/models", headers=headers)
    models = response.json()["models"]
    for model in models:
        status = "✅" if model["available"] else "❌"
        print(f"{status} {model['id']}: {model['name']} - {model['best_for']}")
    
    # 檢查 OCR 服務健康狀態
    response = requests.get(f"{API_URL}/v1/ocr/health", headers=headers)
    health = response.json()
    print(f"服務狀態: {health['status']}")
    for service, status in health["services"].items():
        print(f"  {service}: {status}")

    OCR 回應格式

    {
        "success": true,
        "text": "辨識出的文字內容...",
        "confidence": 0.95,
        "model": "deepseek-ocr",
        "processing_time": 1.234,
        "details": {
            "pages": 1,
            "method": "direct_extraction"  // 或 "ocr"
        }
    }

    💬 Chat Completions API 文檔

    對話生成 API,支援多種地端與雲端模型,相容 OpenAI API 格式。

    可用模型分類

    類型 提供者 模型範例 特點
    地端 llama.cpp gpt-oss:120b 本地運行、無網路需求、資料隱私
    地端 Ollama qwen2.5:72b, llava:7b 本地視覺模型、快速回應
    雲端 DeepSeek deepseek-chat, deepseek-reasoner 高效能、推理專精
    雲端 SiliconFlow deepseek-ai/DeepSeek-V3, Qwen/Qwen3-235B-A22B 50+ 模型、多廠商整合

    SiliconFlow 熱門模型

    模型 ID 名稱 特點 最適用場景
    deepseek-ai/DeepSeek-R1 DeepSeek R1 深度推理、思維鏈 數學證明、邏輯分析
    deepseek-ai/DeepSeek-V3 DeepSeek V3 通用對話、128K 上下文 日常對話、長文本
    Qwen/Qwen3-235B-A22B Qwen 3 235B 2350 億參數、頂尖性能 複雜任務、專業諮詢
    Qwen/Qwen2.5-72B-Instruct Qwen 2.5 72B 中文頂尖、指令跟隨 中文寫作、知識問答
    Qwen/Qwen2.5-Coder-32B-Instruct Qwen Coder 32B 程式碼專精 程式開發、代碼審查
    zai-org/GLM-4.7 GLM-4.7 智譜最新版 中文對話、內容創作
    moonshotai/Kimi-K2-Thinking Kimi K2 Thinking 深度思考、推理增強 複雜推理、數學問題

    Python 基礎設定

    import requests
    
    API_URL = "https://ollama_pjapi.theaken.com"
    API_KEY = "YOUR_API_KEY"
    
    headers = {
        "Authorization": f"Bearer {API_KEY}",
        "Content-Type": "application/json"
    }
    
    def chat(model, messages, stream=False):
        """通用對話函數"""
        response = requests.post(
            f"{API_URL}/v1/chat/completions",
            headers=headers,
            json={
                "model": model,
                "messages": messages,
                "stream": stream
            }
        )
        return response.json()

    🏠 地端模型使用範例

    # 使用地端 GPT-OSS 120B 模型
    result = chat(
        model="gpt-oss:120b",
        messages=[
            {"role": "system", "content": "你是一個專業的助手"},
            {"role": "user", "content": "請解釋什麼是機器學習"}
        ]
    )
    print(result["choices"][0]["message"]["content"])
    
    # 使用地端 Qwen 2.5 72B 模型
    result = chat(
        model="qwen2.5:72b",
        messages=[{"role": "user", "content": "用中文寫一首詩"}]
    )
    print(result["choices"][0]["message"]["content"])

    ☁️ SiliconFlow 雲端模型使用範例

    # 使用 DeepSeek V3(通用對話)
    result = chat(
        model="deepseek-ai/DeepSeek-V3",
        messages=[{"role": "user", "content": "今天天氣如何?"}]
    )
    print(result["choices"][0]["message"]["content"])
    
    # 使用 DeepSeek R1(深度推理)
    result = chat(
        model="deepseek-ai/DeepSeek-R1",
        messages=[{"role": "user", "content": "證明根號2是無理數"}]
    )
    print(result["choices"][0]["message"]["content"])
    
    # 使用 Qwen 3 235B(頂尖性能)
    result = chat(
        model="Qwen/Qwen3-235B-A22B",
        messages=[{"role": "user", "content": "分析人工智能的未來發展趨勢"}]
    )
    print(result["choices"][0]["message"]["content"])
    
    # 使用 Qwen Coder(程式開發)
    result = chat(
        model="Qwen/Qwen2.5-Coder-32B-Instruct",
        messages=[{"role": "user", "content": "寫一個 Python 快速排序演算法"}]
    )
    print(result["choices"][0]["message"]["content"])

    🔄 串流回應範例

    import requests
    import json
    
    def chat_stream(model, messages):
        """串流對話函數"""
        response = requests.post(
            f"{API_URL}/v1/chat/completions",
            headers=headers,
            json={
                "model": model,
                "messages": messages,
                "stream": True
            },
            stream=True
        )
    
        for line in response.iter_lines():
            if line:
                line = line.decode('utf-8')
                if line.startswith('data: ') and line != 'data: [DONE]':
                    data = json.loads(line[6:])
                    if 'choices' in data and data['choices']:
                        delta = data['choices'][0].get('delta', {})
                        if 'content' in delta:
                            print(delta['content'], end='', flush=True)
    
    # 使用串流回應
    chat_stream(
        model="deepseek-ai/DeepSeek-V3",
        messages=[{"role": "user", "content": "寫一篇關於AI的文章"}]
    )

    📋 查詢可用模型

    # 查詢所有可用模型
    response = requests.get(f"{API_URL}/v1/models", headers=headers)
    models = response.json()["data"]
    
    # 按部署類型分類顯示
    local_models = [m for m in models if m.get("deployment_type") == "local"]
    cloud_models = [m for m in models if m.get("deployment_type") == "cloud"]
    
    print("=== 地端模型 ===")
    for m in local_models:
        print(f"  {m['id']} ({m.get('provider', 'unknown')})")
    
    print("\n=== 雲端模型 ===")
    for m in cloud_models:
        provider = m.get('provider', 'unknown')
        print(f"  {m['id']} ({provider})")

    Chat Completions 回應格式

    {
        "id": "chatcmpl-xxx",
        "object": "chat.completion",
        "created": 1700000000,
        "model": "deepseek-ai/DeepSeek-V3",
        "choices": [
            {
                "index": 0,
                "message": {
                    "role": "assistant",
                    "content": "回應內容..."
                },
                "finish_reason": "stop"
            }
        ],
        "usage": {
            "prompt_tokens": 10,
            "completion_tokens": 50,
            "total_tokens": 60
        }
    }